草庐IT

NumPy 位运算

全部标签

c++ - 总是使用构造函数而不是显式转换运算符

我有以下类(class):templateclassFoo{public:Foo(T1*obj):obj(obj){}templateFoo(constFoo&other):obj(other.obj){}templateexplicitoperatorFoo(){returnFoo(static_cast(obj));}T1*obj;};第二个构造函数的目的是从Foo隐式转换至Foo如果从X*进行隐式转换,则允许至Y*是允许的。转换运算符允许从Foo进行显式转换至Foo使用来自X*的显式转换至Y*.但我注意到转换运算符从未被使用过。编译器总是使用第二个构造函数,即使我进行显式转换也是

c++ - 成员访问运算符的 lhs 求值与其参数的副作用之间是否存在先序关系?

这个问题在这里已经有了答案:Inf(x),canxbeevaluatedbeforef?(2个答案)关闭5年前。我已阅读Orderofevalution来自cppreference,但我找不到任何与这种情况有关的规则。这是否意味着没有sequenced-before关系或者我错过了什么?谢谢。下面的代码片段给出了一个例子。#includestructFoo{voidfunc(std::unique_ptr){}};intmain(){autoptr=std::make_unique();ptr->func(std::move(ptr));//Isthisvalid?return0;}

c++ - 哪些整数运算是不安全的?

我的应用程序计算用户指定的一些整数表达式。我想检测所有潜在的错误并报告它们。所有计算都在int64_t中完成(签)。公式可能包括几乎所有的C++二元运算符(+、-、*、/、%、|、||、&、|1045,7915|和六个比较运算符)和整数(可能是负数)。问题是:在计算这样的表达式时可能会发生什么错误,从而使我的程序终止?我想到了其中两个:除以零(或模数)师&&减-1。有符号整数溢出也可能发生,但据我所知,在这种设置下它不会对大多数CPU造成任何危害,因此我们忽略它。 最佳答案 这是一个很好的引用:https://wiki.sei.cm

c++ - 运算符重载 C 结构

我希望能够为我在C++代码中使用的C结构(structtm中的/std::tm中的)创建赋值运算符。这对我的程序来说不是必需的,我只是想知道是否可以覆盖。任何帮助将不胜感激。在头文件tm_operators.hpp中:#ifndeftm_operators_hpp#definetm_operators_hpp#include#includestaticinlinebooloperator==(conststd::tm&dt1,conststd::tm&dt2){return(dt1.tm_yday==dt2.tm_ydayanddt1.tm_year==dt2.tm_year);}/*

c++ - 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级?

C++中指向成员解引用运算符(.*和->*)的指针的运算符优先级为4,而函数调用运算符的优先级为2。这几乎可以保证需要括号:#includestructA{intb;intfunc1(inta){returna+b+1;}intfunc2(inta){return2*a+b;}};intmain(){Aa;a.b=3;int(A::*ptr)(int);ptr=&A::func1;std::cout在我看来,将.*定义为优先级2会(具有从左到右的关联性)否定括号的需要,并且没有明显的不良副作用。选择这个优先级的原因是什么? 最佳答案

c++ - 如何检查 C++ 编译时是否存在运算符的特定重载?

我有一个类,它为多种输入类型重载()运算符,即structType{voidoperator()(int);voidoperator()(std::string);};现在,我想使用SFINAE检查是否存在特定的()运算符重载,即if(Type()(std::string)overloadexists){//dosomething...}这在C++11中可行吗?(我不能使用C++14或C++17)。注意:在实际代码中,有一个模板类接受具有某些属性的类类型。该模板中有一个成员函数,它将根据参数类型的()运算符的某些特定重载是否存在而专门化。 最佳答案

c++ - 在逗号运算符的 LHS 中初始化匿名互斥锁持有类实例

假设我有这样的代码:#include"boost/thread/mutex.hpp"usingboost::mutex;typedefmutex::scoped_locklock;mutexmut1,mut2;voidFunc(){//...}voidtest_raiicomma_1(){lockmut1_lock(mut1);Func();}voidtest_raiicomma_2(){(lock(mut1)),Func();}voidtest_raiicomma_3(){(lock(mut1)),(lock(mut2)),Func();//Warning!}intmain(){te

c++ - <hash_set> 相等运算符在 VS2010 中不起作用

示例代码:std::hash_seths1;//alsoitrystd::unordered_set-sameeffectstd::hash_seths2;hs1.insert(15);hs1.insert(20);hs2.insert(20);hs2.insert(15);assert(hs1==hs2);hash_set不按照散列函数定义的某种顺序存储元素...为什么?请注意,此代码使用stdext::hash_set在VS2008中工作。 最佳答案 在VisualC++2010中,hash_set和unordered_set的

c++ - std::vector 的 Typedef 和 ostream 运算符

我创建了一个Chromosome类,它最终只是一个带有ostream运算符的vector包装器,所以我决定改用typedefvector。但是,我在使用模板化的ostream运算符时遇到了问题……这是最好的方法吗?(我见过一些方法,但都没有奏效)templateclassChromosome{public:typedeftypenamestd::vectortype;typedeftypenamestd::pairptr_pair;};template//line19below:std::ostream&operator::type&chromosome){for(autoiter=c

c++ - 前向声明不适用于转换运算符

考虑下一段代码:#includeusingnamespacestd;classB;classA{public:A(){p=1;}intp;operatorB(){Bb;b.x=this->p;returnb;}};classB{public:intx;};intmain(){Aa;Bb=a;return0;}我正在尝试将A转换为B,但我得到以下编译器提示:..\main.cpp:13:error:returntype'structB'isincomplete当我这样做时:#includeusingnamespacestd;classB{public:intx;};classA{publ